# 导入配置常量
import constants, random
# 终端命令的基类：BaseCommand, 终端命令的异常处理类：CommandError
from django.core.management.base import BaseCommand, CommandError
# 添加模型中的老师信息类
from courses.models import Teacher
# 导入faker类
from faker import Faker


# 类名必须是Command而且一个文件就是一个命令类，这个命令类必须直接或间接继承BaseCommand
class Command(BaseCommand):
    # help后面是这个命令的描述信息
    help = "添加授课老师的信息"

    # 如果当前命令，需要接受来自终端的参数，可以使用add_arguments
    """
    add_arguments有两种参数
    1、位置参数，这个必须填写。
    2、命令参数可以选择填写
    """

    def add_arguments(self, parser):

        # 位置参数，必填项,type的值需要根据需求更改类型
        # parser.add_argument('name', nargs='+', type=str)

        # 命令参数，可选项
        parser.add_argument(
            '--type',
            dest='type',
            default='teacher',
            type=str,
            help='测试数据的类型',
        )

        parser.add_argument(
            '--number',
            dest='number',
            default=10,
            type=int,
            help='添加数据的数量',
        )

    # 命令执行的核心方法，位置参数传递到args中，命令参数传递到options中,options参数返回的值是一个列表，里面可以存放多个值
    def handle(self, *args, **options):
        """添加课程数据"""
        if options["type"] == "teacher":
            self.add_teacher(options)
        elif options["type"] == "number":
            self.add_direction(options)

    def add_teacher(self, options):
        """添加老师的信息"""
        faker = Faker(constants.DEFAULT_FAKER_LANGUAGE)
        for i in range(options["number"]):
            Teacher.objects.create(
                name=faker.unique.name(),  # unique 唯一的
                avatar="teacher/avatar.jpg",  # 老师信息中的头像
                role=random.randint(0, 2),  # 讲师身份
                title="讲师",  #职位
                signature="从业多年，挖坑无数，填坑不尽",  # 导师签名
                brief=f"曾就职于XXX科技股份有限公司，为同事挖坑无数，残害多名同道，人送江湖称号：辣手摧花\
                联系电话：{faker.unique.phone_number()},联系邮箱：{faker.unique.company_email}",  # 导师描述
            )
        print('授课老师测试数据添加完成')

    def add_direction(self, options):
        """添加学习方向的测试数据"""
        print("添加学习方向的测试数据完成....")
